package medium;

/**
 * Created by daodao on 2017/12/6.
 * Problem 6
 * Description: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this:
 * (you may want to display this pattern in a fixed font for better legibility)
 * P   A   H   N
 * A P L S I I G
 * Y   I   R
 * And then read line by line: "PAHNAPLSIIGYIR"
 * Write the code that will take a string and make this conversion given a number of rows:
 * string convert(string text, int nRows);
 * convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".
 */
public class ZigZagConversion {
    public static String convert(String s, int numRows) {
        StringBuilder result = new StringBuilder();
        int len = s.length();
        if (len == 0) {
            return result.toString();
        }
        if (numRows == 1) {
            return s;
        }
        // base是zigzag的基本组成单元大小
        int base = 2 * numRows - 2;
        for (int i = 0; i < numRows; i++) {
            for (int j = i; j < len; j += base) {
                result.append(s.charAt(j));
                if (i != 0 && i != numRows - 1 && j + base - 2 * i < len) {
                    result.append(s.charAt(j + base - 2 * i));
                }
            }
        }
        return result.toString();
    }
}
